/***************************************************************************
 *            pdf-new.h
 *
 *  Mon Mar 14 14:27:00 2011
 *  Copyright  2011  Alcione Ferreira
 *  <alcione.sombra@gmail.com>
 ****************************************************************************/

#include <bibliotecas.h>

using namespace std;

#ifndef __PDF_NEW_H__
#define __PDF_NEW_H__ 1

/**
 * Metódo utilizado para o tratamento de excessão.
 */
void erro(HPDF_STATUS , HPDF_STATUS , void *);

class PDFNEW
	{
	public:
		/** Construtor da classe.*/
		PDFNEW(BANCOPG *,int,int, ...);
		/** Destrutor da classe.*/
		~PDFNEW();
		/**Método responsável pelo processamento do PDF.*/
		void processar();
		/**Método utilizado para gerar o cabeçalho padrão.*/

	protected:
		HPDF_Doc PDF_doc;/**<Atributo construtor da biblioteca PDF.*/
		HPDF_Page Pagina;/**<Atributo utilizado para criar uma página.*/
    	HPDF_Font Font_Definida;/**<Atributo de definição de fonte.*/
		HPDF_Font Font_Nome;/**<Atributo de nome de fonte.*/
    	HPDF_REAL Titulo;/**<Atributo do tipo ponto flutuante utilizado pela biblioteca PDF*/
    	HPDF_REAL Altura;/**<Atributo utilizado para guardar a altura de uma página.*/
    	HPDF_REAL Largura; /**<Atributo utilizado para guardar a largura de uma página.*/
    	HPDF_UINT i;/**<Atributo do tipo inteiro utilizado pela biblioteca PDF*/
		HPDF_UINT Alt_IMG;/**<Atributo do tipo inteiro utilizado pela biblioteca PDF*/
		HPDF_UINT Lar_IMG;/**<Atributo do tipo inteiro utilizado pela biblioteca PDF*/
		HPDF_Image image;/**<Atributo do tipo imagem utilizado pela biblioteca PDF*/
		HPDF_Destination dst;/**<Atributo de destinação da biblioteca PDF.*/
		HPDF_Rect rect; /**<Atributo de criação de retangulo da biblioteca PDF.*/

	private:
		BANCOPG *conexao;/**<Conexão com o banco de Dados*/
		int coluna[8][2];/**<Posicionamento das colunas no relatório */
		int col_reg[8];/**<Colunas de resultados*/;
		int colunas; /**<Quantidade de Colunas do relatório.*/
		int tipo_relatorio;/**<Atributo utilizado para armazenar o tipo de relatório quer será gerado.*/
		int retorno;/**<Retorno do processamento.*/
		string Arq_PDF;/**<Atributo que contem o nome do arquivo pdf.*/
		int cod_fun;/**<Atributo reservado para armazenar o código do funcionário logado.*/
		string nome_fun;/**<Atributo reservado para armazenar o nome do funcionário logado.*/
		string datas[2];/**<Atributo utilizado para guardar o período do relatório.*/
		string cod_servico;/**<Atributo utilizado para guardar o código do serviço selecionado.*/
		string cod_funcionario;/**<Atributo utilizado para guardar o código do funcionario selecionado.*/
		string cod_fun_selo;/**<Atributo utilizado para guardar o código do funcionario selecionado.*/
		string nome_funcionario;/**<Atributo utilizado para guardar o nome do funcionario selecionado.*/
		string login_funcionario;/**<Atributo utilizado para guardar o nome do funcionario selecionado.*/
		int nivel_acesso;/**<*/
		string codigo_servico;/**<Atributo utilizado para guardar o código do serviço selecionado para visualização.*/
		string desc_servico;/**<Atributo utilizado para guardar a descrição do serviço selecionado.*/
		string cod_cliente;/**<Atributo utilizado para guardar o código do cliente selecionado.*/
		string nome_cliente;/**<Atributo utilizado para guardar o nome do cliente selecionado.*/
		string dc_recibo;/**<Atributo utilizado para guardar o tipo de recibo selecionado.*/
		HPDF_TextAlignment Alinhamento;/**<Atributo utilizado para setar o alinhamento do texto na biblioteca PDF.*/
		string *BASES;/**<*/
		bool detalhe;

		int pag; /**<Atributo que guarda o número página atual.*/
		int pags; /**<Atributo que guarda a quantidade de páginas.*/
		int total_reg; /**<Total de registros da consulta */

		void set_cabecalho();
		/**Método utilizado para gerar o rodapé padrão.*/
		void set_rodape();
		/**Método utilizado para processar o texto.*/
		void texto();
		/**Método utilizado para carregar dados do funcionário.*/
		void dados_funcionario(int );
		/**Método utilizado para carregar dados do serviço.*/
		void dados_servico();
		/**Método utilizado para carregar dados de clientes.*/
		void dados_cliente();
		/**Método de detalhamento de informações de um recibo.*/
		void detalhamento(const char*, const char*, int* , int* );
		/**Método de resumo do relatório. */
		void resumo(int *, int*);
		/**Método de contagem de selos. */
		int contar_selos (int);
		/**Método de contagem de serviços */
		string contagem(string);
		/**Método de geração de relatório da escritura*/
		void relatorio_escr (int *, int *);
		/** */
		float valor_servico (int, string, ...);
		/** */
		int bases_escritura(string);
		/** */
		void dados_caixa(int *, int *);
					
	};

#endif /*__PDF_NEW_H__*/